// 请实现一个函数，用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样，那么它是对称的。

// 例如，二叉树 [1,2,2,3,4,4,3] 是对称的。

//     1
//    / \
//   2   2
//  / \ / \
// 3  4 4  3
// 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

//     1
//    / \
//   2   2
//    \   \
//    3    3

// 来源：力扣（LeetCode）
// 链接：https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof
// 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

#include<bits/stdc++.h>
using namespace std;

// 递归

// 执行用时：
// 16 ms
// , 在所有 C++ 提交中击败了
// 11.91%
// 的用户
// 内存消耗：
// 36.5 MB
// , 在所有 C++ 提交中击败了
// 5.08%
// 的用户



struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  };

class Solution {
public:
    string str1="";
    string str2="";

    bool isSymmetric(TreeNode* root) {
        roll(root);
        dfs(root);
        if(str1==str2){
            return true;
        }
        return false;
    }
    void roll(TreeNode* root){
        if(root==nullptr){
            str1 = str1+'#';
            return;
        }
        str1 = str1+to_string(root->val);
        roll(root->left);
        roll(root->right);
    }
    void dfs(TreeNode* root){
        if(root == NULL){
            str2 = str2+'#';
            return;
        }
        str2 = str2+to_string(root->val);
        swap(root->left,root->right);
        dfs(root->left);
        dfs(root->right);
    }
};